home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Linux Cubed Series 7: Sunsite
/
Linux Cubed Series 7 - Sunsite Vol 1.iso
/
system
/
emulator
/
bsvc-1.000
/
bsvc-1
/
bsvc-1.0.4
/
src
/
UI
/
help.tk
< prev
next >
Wrap
Text File
|
1995-07-26
|
6KB
|
189 lines
#!/usr/local/bin/wish -f
###############################################################################
# $Id: help.tk,v 1.3 1995/06/29 22:42:23 bmott Exp $
###############################################################################
#
# HelpMe - A hype-text help facility for Tcl/Tk.
#
# By: Bradford W. Mott October 5,1993
#
# Imbedded Usage: HelpMe { filename top_node widget_name window_name }
# filename - help file to display
# widget_name - help's widget base name
# window_name - window managers name
###############################################################################
# $Log: help.tk,v $
# Revision 1.3 1995/06/29 22:42:23 bmott
# Changed font resources
#
# Revision 1.2 1995/01/01 03:03:19 bmott
# Changed ToNode highlight and took out the Top button
#
# Revision 1.1 1994/02/18 20:29:13 bmott
# Initial revision
#
###############################################################################
proc NOP {} {}
proc PreviousNode {w stackvar info} {
global $stackvar
eval "set stack \$$stackvar"
if {[llength $stack] != 1} {
set new_stack "[lrange $stack 0 [expr [llength $stack]-2]]"
eval "set $stackvar \"$new_stack\""
set node "[lindex $new_stack [expr [llength $new_stack]-1]]"
display_node "$node" $info $w
}
}
proc RemoveHigh {w} {
$w tag remove ToNodeHigh 1.0 end
}
proc AddHigh { x y w} {
set range [$w tag nextrange ToNodeTag "@$x,$y linestart" "@$x,$y lineend"]
while {1} {
if {[$w compare "@$x,$y" >= [lindex $range 0]] && \
[$w compare "@$x,$y" <= [lindex $range 1]]} {
$w tag remove ToNodeHigh 1.0 end
$w tag add ToNodeHigh [lindex $range 0] [lindex $range 1]
break;
} else {
set range [$w tag nextrange ToNodeTag [lindex $range 1] "@$x,$y lineend"]
}
}
}
proc ToNodeBind { x y w info stackvar} {
global $stackvar
set range [$w tag nextrange ToNodeTag "@$x,$y linestart" "@$x,$y lineend"]
while {1} {
if {[$w compare "@$x,$y" >= [lindex $range 0]] && \
[$w compare "@$x,$y" <= [lindex $range 1]]} {
eval "lappend $stackvar \"[$w get [lindex $range 0] [lindex $range 1]]\""
display_node [$w get [lindex $range 0] [lindex $range 1]] $info $w
break
} else {
set range [$w tag nextrange ToNodeTag [lindex $range 1] "@$x,$y lineend"]
}
}
}
###############################################################################
# This routine parses a line and displays it in the text widget
###############################################################################
proc add_node_text { line w } {
while {1} {
set first [string first "#" $line]
if {$first != 0} {
if {$first > 0} {
set arg [string range $line 0 [expr $first-1]]
set line [string range $line $first end]
$w insert end $arg
$w tag remove NodeTag "end - [string length $arg] chars" "end"
$w tag remove ToNodeTag "end - [string length $arg] chars" "end"
} else {
$w insert end $line\n
$w tag remove NodeTag "end - [expr [string length $line]+1] chars" \
"end"
$w tag remove ToNodeTag "end - [expr [string length $line]+1] chars" \
"end"
break;
}
} else {
set last [string first ">" $line]
if {$last == -1} {
} else {
set command [string range $line $first $last]
set arg [string range $command [expr [string first "<" $command]+1] \
[expr $last-1]]
set line [string range $line [expr $last+1] end]
if {[regexp {^#Node<} $command] == 1} {
$w insert end $arg
$w tag add NodeTag "end - [string length $arg] chars" "end"
}
if {[regexp {^#ToNode<} $command] == 1} {
$w insert end $arg
$w tag add ToNodeTag "end - [string length $arg] chars" "end"
}
}
}
}
}
proc display_node { node info w } {
$w delete 0.0 end
set start [lsearch -regexp $info "#Node<$node>"]
set end [lsearch -regexp $info "#NodeEnd<$node>"]
set node_text [lrange $info $start $end]
foreach i $node_text {add_node_text $i $w}
}
proc HelpMe { filename w name } {
set stackname [string range $w 1 end]_global_stack
global $stackname
catch {destroy $w}
toplevel $w
wm title $w "$name"
wm iconname $w "$name"
set file [open $filename {r}]
set info [read $file]
close $file
set info [split $info \n]
## Find the top level node
foreach i $info {
if {[regexp {^#TopLevelNode<} $i] == 1} {
set top_node [string range $i [expr [string first "<" $i]+1] \
[expr [string first ">" $i]-1]]
break
}
}
text $w.helpText -cursor left_ptr -yscrollcommand "$w.scroll set"
bind $w.helpText <Any-KeyPress> "NOP"
bind $w.helpText <Any-ButtonPress> "NOP"
bind $w.helpText <Any-Motion> "NOP"
bind $w.helpText <Any-Double-ButtonPress> "NOP"
scrollbar $w.scroll -relief raised \
-command "$w.helpText yview"
frame $w.buttons -borderwidth 2 -relief sunken
button $w.buttons.previous -text "Previous" \
-command "PreviousNode $w.helpText $stackname {$info}"
button $w.buttons.dismiss -text "Dismiss" \
-command "destroy $w"
pack $w.buttons.previous -side left -fill x -expand 1 -padx 8 -pady 2
pack $w.buttons.dismiss -side left -fill x -expand 1 -padx 8 -pady 2
pack $w.buttons -side bottom -fill x -expand 1
pack $w.scroll -side left -fill y -expand 1
pack $w.helpText -side left -fill both -expand 1 -padx 4
$w.helpText tag configure NodeTag -font -*-helvetica-medium-o-normal--*-180-*-*-*-*-iso8859-* \
-underline 1 -foreground Red
$w.helpText tag configure ToNodeTag -underline 1
$w.helpText tag configure ToNodeHigh -background White
$w.helpText tag bind ToNodeTag <Button-1> \
"ToNodeBind %x %y $w.helpText {$info} $stackname"
$w.helpText tag bind ToNodeTag <Any-Enter> \
"AddHigh %x %y $w.helpText"
$w.helpText tag bind ToNodeTag <Any-Leave> \
"RemoveHigh $w.helpText"
## Setup the stack
eval "set $stackname \"\""
eval "lappend $stackname \"$top_node\""
display_node $top_node $info $w.helpText
}